package com.bajiao.service.user;

import com.bajiao.entity.account.Account;
import com.bajiao.vo.coupon.CouponResponse;
import com.bajiao.vo.user.*;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bajiao.entity.user.User;

import java.math.BigDecimal;
import java.util.List;

/**
 * @Description: 普通用户
 * @Author: FanJq
 * @Date: 2024-10-1005-11
 * @Version: V1.0
 */
public interface UserService extends IService<User> {

    /**
     * @Description
     * 微信注册
     * @date 2024/12/11 17:49
     * @author FanJq
     * @param mobile
     * @param openId
     * @param unionId
     * @return {@link User}
    */
    User wxRegister(String mobile, String openId, String unionId, String nickname, String avatar, Integer sex, String inviteCode);

    /**
     * @Description
     * App注册
     * @date 2024/12/25 17:43
     * @author FanJq
     * @param mobile
     * @param cipher
     * @param inviteCode
     * @return {@link User}
    */
    User appRegister(String mobile, String cipher, String inviteCode);

    /**
     * @Description
     * 修改密码
     * @date 2024/12/25 17:58
     * @author FanJq
     * @param user
     * @param cipher
     * @return
    */
    void modifyCipher(User user, String cipher);

    /**
     * @Description
     * 根据openID获取用户信息
     * @date 2024/12/11 17:51
     * @author FanJq
     * @param openId
     * @return {@link User}
    */
    User getByOpenId(String openId);

    /**
     * @Description
     * 根据手机号查下删除状态为否的用户
     * @date 2024/12/12 9:29
     * @author FanJq
     * @param mobile
     * @return {@link User}
    */
    User queryByMobileAndNotDelFlag(String mobile);

    /**
     * @Description
     * 用户详情
     * @date 2024/12/12 9:29
     * @author FanJq
     * @param user
     * @return {@link UserInfo}
    */
    UserInfo getUserInfo(User user);

    /**
     * @Description
     * 修改用户资料
     * @date 2024/12/23 10:18
     * @author FanJq
     * @param userId
     * @return {@link UserInfo}
    */
    UserInfo modify(String userId, UserInfo request);

    /**
     * @Description
     * 根据邀请码获取用户
     * @date 2024/12/12 9:28
     * @author FanJq
     * @param inviteCode
     * @return {@link User}
    */
    User getByInviteCode(String inviteCode);

    /**
     * @Description
     * 设置用户兴趣
     * @date 2024/12/13 15:06
     * @author FanJq
     * @param userId
     * @param interest
     * @return
    */
    void setInterest(String userId, String interest);

    /**
     * @Description
     * 获取用户账户信息
     * @date 2024/12/14 16:45
     * @author FanJq
     * @param userId
     * @return {@link Account}
    */
    Account getAccount(String userId);

    /**
     * @Description
     * 资金变动
     * @date 2024/12/12 10:11
     * @author FanJq
     * @param changeMoney 变化金额
     * @param billType 1:收入 2：支出
     * @param orderNo 订单编号
     * @param title 标题
     * @param type 流水类型 1:充值 2:购买优惠券 3:购买商品 4:优惠券退款 5:商品退款 6:注册赠送 7:邀请奖励 99:平台赠送
     * @return
     */
    void changeMoney(String userId, BigDecimal changeMoney, Integer billType, String orderNo, String title, int type);

    /**
     * @Description
     * 用户资产
     * @date 2024/12/20 18:01
     * @author FanJq
     * @param userId
     * @return {@link UserProperty}
    */
    UserProperty getProperty(String userId);

    /**
     * @Description
     * 获取邀请二维码
     * @date 2024/12/23 16:00
     * @author FanJq
     * @param inviteCode
     * @param source
     * @return {@link String}
    */
    String getInviteCode(String inviteCode, String source);

    /**
     * @Description
     * 获取邀请记录
     * @date 2024/12/23 17:20
     * @author FanJq
     * @param userId
     * @return {@link List< InviteRecord>}
    */
    List<InviteRecord> getInviteRecord(String userId);

    /**
     * @Description
     * 获取用户优惠券
     * @date 2024/12/24 17:04
     * @author FanJq
     * @param userId
     * @return {@link List< CouponResponse>}
    */
    List<CouponResponse> getUserCoupon(String userId);

    /**
     * @Description
     * 管理后台列表
     * @date 2025/1/2 11:16
     * @author FanJq
     * @param request
     * @return {@link List< UserAdmin>}
    */
    List<UserAdmin> getUserAdminList(UserAdmin request);

    /**
     * @Description
     * 核销列表
     * @date 2025/1/9 16:45
     * @author FanJq
     * @param keywords
     * @param orderNo
     * @param storeTitle
     * @param title
     * @param createTimeBegin
     * @param createTimeEnd
     * @return {@link List< UserVerify>}
    */
    List<UserVerify> getVerifyList(String keywords, String orderNo, String storeTitle, String title, String createTimeBegin, String createTimeEnd);

    String getHyperlink(User user);
}
